
Face Landmarker 系列告一段落,府裡的健口操也練得有模有樣了。
老爺卻還掛心一件事:
「嘴型看得準了,那長輩念『怕、踏、卡、啦』清不清楚、繞口令順不順,誰來聽?」
府裡的 sherpa-onnx 聽這四個單音節時不太穩定,
於是決定上山,拜訪這位雲端「聞聲錄字」的俠客:Google Cloud Speech-to-Text。
今天就來認識他吧!
Cloud Speech-to-Text(Cloud STT)是 Google Cloud 提供的語音辨識 API,
讓開發者把 Google 的語音辨識技術整合進自己的 App。
語音辨識可以直接在手機端處理音訊(裝置端),也可以把音訊送到雲端的服務處理。
目前專案用的 sherpa-onnx 屬於裝置端,今天主角 Cloud Speech-to-Text 屬於雲端。
| 比較項目 | 裝置端(sherpa-onnx) | 雲端(Cloud Speech-to-Text) |
|---|---|---|
| 在哪裡辨識 | 使用者手機 | Google Cloud |
| 網路 | 不需要 | 需要 |
| 模型 | 打包進 App | 在雲端,不佔 App 空間 |
| 費用 | 開源,不另外計費 | 依處理的音訊秒數計費 |
| 音訊 | 留在手機 | 上傳到 Google Cloud |
Cloud STT 的 API 有 V1、V2 兩個版本:兩者的請求格式不同,
最新的 Chirp 模型只能在 V2 使用,官方建議新使用者直接用 V2。
以 V2 為例,一次辨識請求大致包含:
| 欄位 | 說明 | 例子 |
|---|---|---|
| recognizer | 辨識器:可儲存、重複使用的設定;不另外建立時用 _ | projects/…/recognizers/_ |
| model | 模型 | chirp_3 |
| language_codes | 語言(BCP-47) | cmn-Hant-TW(中文,台灣) |
| features | 功能開關 | 自動標點、字詞時間戳 |
| adaptation | 語音調整(詞語清單) | 怕、踏、卡、啦 |
| content 或 uri | 音訊:直接放進請求,或給 Cloud Storage 路徑 | gs://bucket/file.wav |
回應裡的重點欄位:
| 欄位 | 說明 |
|---|---|
| alternatives | 候選結果,第一個是最可能的 |
| transcript | 辨識出的文字 |
| confidence | 整句的信心分數,0~1 的估計值;通常只有最佳結果、而且是確定(is_final)的結果才有 |
官方提醒兩件事:
- 不要把 confidence 當成一定會有的欄位,它可能沒有值,也可能不準確。
- 辨識不出語音時,results 是空的;常見原因是音質太差,或語言代碼、編碼、取樣率和音訊不符。
| 方式 | 音訊怎麼送 | 上限 | 適合 | 健口動一動可能的用法 |
|---|---|---|---|---|
同步辨識(Recognize) |
放進請求,或給 Cloud Storage 路徑 | 1 分鐘或 10 MB,先到者為準 | 短音檔,錄完再辨識 | 念完一輪「怕踏卡啦」或一句繞口令後送出 |
串流辨識(StreamingRecognize) |
邊錄邊送;每則 25 KB 內,送出速度需接近即時;僅 gRPC | 一個串流最長 5 分鐘 | 即時字幕、語音指令 | 長輩邊念,畫面邊回饋 |
批次辨識(BatchRecognize) |
只收 Cloud Storage 路徑;非同步,完成後再取結果 | 每個檔案最長 8 小時,每次最多 5 個檔案 | 長錄音、會議記錄 | 目前用不到 |
Chirp 3 在 2025 年 10 月已經是正式版,但「繁體中文(台灣)」這個語言目前還是 Preview(體驗版)。
所以實際串接時,可以 chirp_3、chirp_2 都試試看。
V2 模型比較頁列出三個模型:
| 模型 | 用途 | 繁體中文可以用嗎? | 可選的伺服器地區(繁中) |
|---|---|---|---|
| chirp_3 | 最新一代模型,官方說準確度與速度都優於前代 | 可以,但還在 Preview | us(美國)、eu(歐洲) |
| chirp_2 | 前一代模型,支援串流、翻譯 | 可以 | us-central1(美國)、europe-west4(歐洲)、asia-southeast1(新加坡) |
| telephony | 電話錄音專用(通常是 8 kHz) | 語言表沒有列出繁中 | — |
小提醒:
呼叫模型時要指定「區域」,也就是音訊要送到哪個地區的伺服器處理,
和使用者人在哪裡無關。
語言表列出的項目(語音調整、自動標點、字詞信心分數)以 cmn-Hant-TW 為準;
其他項目依各模型頁面的說明整理。
| 功能 | 說明 | chirp_3 | chirp_2 | 健口動一動可能的用法 |
|---|---|---|---|---|
| 語音調整 | 提高清單裡詞語被辨識出來的機率(見下一節) | ✓ | ✓ | 放入「怕、踏、卡、啦」和繞口令 |
| 自動標點 | 自動加上標點,可以關閉 | ✓ | ✓ | 比對繞口令前先關掉,或移除標點 |
| 降噪(denoiser) | 送進模型前,先減少背景音樂、雨聲、車聲 | ✓ | ✓(另有 SNR 過濾) | 減少長輩家中的環境噪音 |
| 斷句靈敏度(endpointing) | 串流時,偵測到停頓後要等多久才算說完;SUPERSHORT 適合單一詞語 | ✓ | 頁面未列出 | 單音節的即時回饋 |
| 字詞時間戳 | 每個字詞的開始、結束時間 | 列在不支援清單 | ✓(開啟後品質、速度可能略降) | 計算每個音節的間隔與速度 |
| 字詞信心分數 | 回應的每個字詞附一個 confidence 數值 | 列在不支援清單 | 有數值,但官方說明不能當成信心分數 | 可能不適合直接當發音分數 |
語音調整(Speech adaptation)可以提高特定詞語被辨識出來的機率。
官方的例子是:
音訊裡常出現 weather,就把它加進清單,讓它比發音相近的 whether 更容易被選中。
「怕、踏、卡、啦」都是單音節,正是語音調整可以派上用場的地方。
| 項目 | 內容 |
|---|---|
| 詞語清單(PhraseSet) | 放進想提高辨識機率的詞或句子 |
| 加權(boost) | 大於 0 的數值,實務上限 20;越高,越容易選中清單裡的詞 |
| 單一詞語 | 預設的調整效果比較小,單一詞語尤其如此,可以用 boost 加強 |
| 副作用 | boost 越高,沒說的詞也越可能被寫成清單裡的詞 |
| 數量上限 | 每個 PhraseSet 最多 1,200 個詞語,每個最多 100 字元;Chirp 3 最多 1,000 個,官方建議越少越好,避免影響清單以外的詞 |
| 自訂類別(CustomClass) | Chirp 2 不支援 |
- 概念上和 sherpa-onnx 的熱詞(hotwords)很像,
都是先告訴模型哪些詞要特別注意,再用分數決定加權多少。- 官方也建議 boost 要邊測邊調整,在漏聽和誤判之間找到平衡。
| 建議這樣做 | 盡量避免 |
|---|---|
| 取樣率 16,000 Hz 以上 | 重新取樣(例如把 8 kHz 的電話錄音轉成 16 kHz) |
| 用無損編碼:FLAC 或 LINEAR16 | mp3、m4a、mu-law 等有損編碼;非用不可時,依序優先 AMR_WB、OGG_OPUS |
| 麥克風盡量靠近說話的人 | 過多的背景噪音與回音 |
| 關掉自動增益(AGC)與降噪處理,避免破音 | 送出前自己先降噪,官方說通常反而降低準確度 |
| 串流時,每段音訊約 100 毫秒 | — |
對照健口動一動現在的錄音設定(MicStream):
16 kHz、16-bit PCM、單聲道,存成 WAV,剛好就是官方建議的 LINEAR16。
WAV 和 FLAC 可以從檔頭自動判斷編碼與取樣率,不用另外指定。
今天這趟上山,認識了俠客 Google Cloud Speech to Text 的本領:
本事都打聽清楚了,他能不能聽懂長輩的「怕、踏、卡、啦」,還得請他實際出手才知道!
要請這位大俠出手,得先出示令牌(Google Cloud 的憑證)。
但令牌不適合發給每一支長輩的手機,萬一外流,帳單會寄到府上。
所以府裡得先在山腳下開一間鏢局:
「由鏢局保管令牌,替 App 把錄音送上山、把結果帶回來。」
明天就來開這間鏢局: Firebase Cloud Functions
感謝有緣看到這裡的你~
希望佛菩薩也祝福你:🌟平安健康 開心順遂🌟
南無觀世音菩薩🍀 南無地藏菩薩🏠 南無阿彌陀佛☀️